#ifndef ELEMENTO_H_
#define ELEMENTO_H_

#include "../Objeto.h"
#include "../claves/Key.h"
#include "../Bytes.h"
#include "../Constantes.h"
#include "../claves/TipoClave.h"

/*
 * Funcion: Elemento que relaciona el offset o numero de componente de un dato
 * con su clave.
 */
class Elemento
{
private:
	offset archivo;
	Key clave;
public:

	/*
	 * Pre: -
	 * Pos: Crea una nueva instancia.
	 */
	Elemento(Key clave, offset offset);

	/*
	 * Pre: -
	 * Pos: Crea una nueva instancia con el estado del otro.
	 */
	Elemento(const Elemento& otro);

	/*
	 * Pre: -
	 * Pos: crea una nueva instancia.
	 */
	Elemento();

	/*
	 * Pre: -
	 * Pos: setea la clave.
	 */
	void setKey(const Key&);

	/*
	 * Pre: -
	 * Pos: devuelve la clave.
	 */
	Key getClave()const ;

	/*
	 * Pre: -
	 * Pos: devuelve el offset.
	 */
	offset getDato()const;

	/*
	 * Pre: -
	 * Pos: Libera los recursos instanciados.
	 */
	virtual ~Elemento();

	/*
	 * Pre: -
	 * Pos: serializa el estado del objeto.
	 */
	Bytes serializarse();

	/*
	 * Pre: -
	 * Pos: hidrata el estado del objeto.
	 */
	bool hidratarse(const Bytes& b, TipoClave* extractor);
	bool operator<=(const Elemento&) const;
};

#endif /*ELEMENTO_H_*/
